Veb server + REST API#
alqor işlət 05-veb-server.alq serveri işə salır
alqor işlət 05-veb-server.alq -- sınaq port açmadan yoxlayırNecə işlətmək#
PowerShell
alqor işlət numuneler\05-veb-server.alqStudio-da: faylı açın və F5 basın. Nümunələr ilk açılışda Sənədlər\Alqor\nümunələr qovluğuna kopyalanır.
Kod#
Alqor
// Nümunə 5 — Veb server + REST API
//
// alqor işlət 05-veb-server.alq serveri işə salır
// alqor işlət 05-veb-server.alq -- sınaq port açmadan yoxlayır
gətir veb
sinif Tapşırıq
qurucu(açıq xassə id: tam,
açıq xassə mətn: mətn,
açıq xassə bitib: məntiq = yanlış)
son
dəyişən tapşırıqlar: siyahı[Tapşırıq] = []
dəyişən növbətiId = 1
funksiya tapşırıqTap(id: tam) -> Tapşırıq?
qaytar tapşırıqlar.tap((t) => t.id == id)
son
funksiya serveriQur() -> istənilən
dəyişən s = yeni veb.Server()
s.ara(veb.jurnal())
s.ara(veb.təhlükəsizlikBaşlıqları())
s.ara(veb.CORS(mənbələr: ["*"]))
s.statik("/statik", "statik")
// ── Əsas səhifə ─────────────────────────────────────────
s.al("/", funksiya(sorğu)
dəyişən sətirlər = tapşırıqlar.çevir((t) =>
<li>{t.mətn}{əgər t.bitib onda " ✓" yoxsa "" son}</li>)
qaytar veb.html(<html>
<head><meta charset="UTF-8" /><title>Tapşırıqlar</title></head>
<body>
<h1>Tapşırıqlar ({uzunluq(tapşırıqlar)})</h1>
<ul>{sətirlər}</ul>
</body>
</html>)
son)
// ── REST API ────────────────────────────────────────────
s.qrup("/api", funksiya(q)
q.al("/tapşırıq", funksiya(sorğu)
qaytar veb.json(tapşırıqlar)
son)
q.al("/tapşırıq/:id", funksiya(sorğu)
dəyişən id = tamƏt(sorğu.parametr("id"), -1)
varsa t = tapşırıqTap(id) onda
qaytar veb.json(t)
son
qaytar veb.json({"xəta": "Tapılmadı"}).kod(404)
son)
q.göndər("/tapşırıq", funksiya(sorğu)
dəyişən v = sorğu.json()
dəyişən mətn = v["mətn"] ?? ""
əgər mətn.kəs() == "" onda
qaytar veb.json({"xəta": "Mətn boş ola bilməz"}).kod(422)
son
dəyişən t = yeni Tapşırıq(növbətiId, mətn.kəs())
növbətiId += 1
tapşırıqlar.əlavə(t)
qaytar veb.json(t).kod(201)
son)
q.yamaq("/tapşırıq/:id", funksiya(sorğu)
dəyişən id = tamƏt(sorğu.parametr("id"), -1)
yoxdursa t = tapşırıqTap(id) onda
qaytar veb.json({"xəta": "Tapılmadı"}).kod(404)
son
t.bitib = doğru
qaytar veb.json(t)
son)
q.sil("/tapşırıq/:id", funksiya(sorğu)
dəyişən id = tamƏt(sorğu.parametr("id"), -1)
tapşırıqlar = tapşırıqlar.filtr((t) => t.id != id)
qaytar veb.boş(204)
son)
son)
qaytar s
son
// ═══════════════════════════════════════════════════════════════
// Port açmadan yoxlama — `veb.sınaq.server`
// ═══════════════════════════════════════════════════════════════
funksiya yoxla(s: istənilən)
dəyişən m = veb.sınaq.server(s)
yaz("── API yoxlaması ──")
yaz("GET /api/tapşırıq → {m.al("/api/tapşırıq").mətnƏt()}")
dəyişən c = m.göndər("/api/tapşırıq", {"mətn": "Süd al"})
yaz("POST /api/tapşırıq → {c.vəziyyət()} {c.mətnƏt()}")
m.göndər("/api/tapşırıq", {"mətn": "Kod yaz"})
dəyişən pis = m.göndər("/api/tapşırıq", {"mətn": " "})
yaz("POST boş mətnlə → {pis.vəziyyət()} {pis.mətnƏt()}")
yaz("GET /api/tapşırıq/1 → {m.al("/api/tapşırıq/1").mətnƏt()}")
yaz("GET /api/tapşırıq/99 → {m.al("/api/tapşırıq/99").vəziyyət()}")
dəyişən y = m.yamaq("/api/tapşırıq/1")
yaz("PATCH /api/tapşırıq/1 → {y.mətnƏt()}")
yaz("DELETE /api/tapşırıq/2 → {m.sil("/api/tapşırıq/2").vəziyyət()}")
yaz("GET /api/tapşırıq → {m.al("/api/tapşırıq").mətnƏt()}")
yaz("GET /yoxdur → {m.al("/yoxdur").vəziyyət()}")
yaz("")
yaz("── HTML səhifə ──")
yaz(m.al("/").mətnƏt())
son
funksiya əsas(arqumentlər: siyahı[mətn])
dəyişən s = serveriQur()
əgər "sınaq" içindədir arqumentlər onda
yoxla(s)
qaytar
son
s.dinlə(8080)
son